#ifndef MYLIB_DRIVER_GPIO_H
#define MYLIB_DRIVER_GPIO_H

#include <mylib/mylib_config.h>

enum {
    GPIO_A = 0*32,
    GPIO_B = 1*32,
    GPIO_C = 2*32,
    GPIO_D = 3*32,
    GPIO_E = 4*32
};

enum {
    GPIO_LEVEL_LOW = 0,
    GPIO_LEVEL_HIGH = 1
};

/*

    GPIO的使用方法，以PC13为例：

    1. 设置GPIO引脚为输出模式
    gpio_direction_output(GPIO_C+13, GPIO_LEVEL_HIGH);
    2. 设置GPIO引脚为输入模式
    gpio_direction_input(GPIO_C+13);
    3. 读取GPIO引脚的输入值
    uint32_t level = gpio_get_value(GPIO_C+13);
    4. 设置GPIO引脚的输出值
    gpio_set_value(GPIO_C+13, GPIO_LEVEL_LOW);

 */

/**
 * @brief 设置GPIO引脚为输入模式
 * 
 * @param gpio 
 */
void gpio_direction_input(uint32_t gpio);

/**
 * @brief 设置GPIO引脚为输出模式
 * 
 * @param gpio 
 */
void gpio_direction_output(uint32_t gpio);

/**
 * @brief 设置GPIO引脚的输出值
 * 
 * @param gpio 
 * @param value 
 */
void gpio_set_value(uint32_t gpio, uint32_t value);

/**
 * @brief 获取GPIO引脚的输入值
 * 
 * @param gpio 
 * @return GPIO_LEVEL_LOW表示低电平，GPIO_LEVEL_HIGH表示高电平
 */
uint32_t gpio_get_value(uint32_t gpio);

#endif   // !MYLIB_DRIVER_GPIO_H
